package com.alks.common.utils.excelUtils;


import lombok.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;

import java.util.Optional;

@Slf4j
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor // 添加这个注解自动生成全参数的构造函数
@ToString
public class CellStyleBuild {
    private short fontSize; // 字体大小，默认为11
    private String fontName; // 字体名称，默认为宋体
    private boolean bold; // 是否加粗，默认不加粗
    private short colorIndex; // 字体颜色索引，默认黑色
    private BorderStyle borderStyle; // 边框样式，默认无边框
    private short borderColor; // 边框颜色，默认黑色
    private HorizontalAlignment alignment; // 水平对齐方式，默认居中
    private VerticalAlignment verticalAlignment; // 垂直对齐方式，默认居中


    /*自定义全部样式*/
    public static CellStyle createCellStyle(Workbook workbook, CellStyleBuild params) {
        if (params == null) {
            params = new CellStyleBuild(); // 如果params为null，直接创建一个新的默认实例
        }
        CellStyle style = workbook.createCellStyle();

        // 设置默认样式
        // 创建字体并设置样式
        Font font = workbook.createFont();
        // 使用Optional来安全地处理可能为null的参数值，确保每个属性都有一个默认值
        font.setFontName(Optional.ofNullable(params.getFontName()).orElse("宋体")); // 设置字体名称
        font.setFontHeightInPoints(Optional.ofNullable(params.getFontSize()).orElse((short)11)); // 设置字体大小
        font.setBold(Optional.ofNullable(params.isBold()).orElse(false)); // 设置是否加粗
        font.setColor(Optional.ofNullable(params.getColorIndex()).orElse(IndexedColors.BLACK.getIndex())); // 设置字体颜色

        style.setFont(font); // 将字体应用于单元格样式

        // 设置边框样式
        style.setBorderTop(Optional.ofNullable(params.getBorderStyle()).orElse(BorderStyle.THIN)); // 上边框
        style.setBorderBottom(Optional.ofNullable(params.getBorderStyle()).orElse(BorderStyle.THIN)); // 下边框
        style.setBorderLeft(Optional.ofNullable(params.getBorderStyle()).orElse(BorderStyle.THIN)); // 左边框
        style.setBorderRight(Optional.ofNullable(params.getBorderStyle()).orElse(BorderStyle.THIN)); // 右边框
        style.setTopBorderColor(Optional.ofNullable(params.getBorderColor()).orElse(IndexedColors.BLACK.getIndex())); // 上边框颜色
        style.setBottomBorderColor(Optional.ofNullable(params.getBorderColor()).orElse(IndexedColors.BLACK.getIndex())); // 下边框颜色
        style.setLeftBorderColor(Optional.ofNullable(params.getBorderColor()).orElse(IndexedColors.BLACK.getIndex())); // 左边框颜色
        style.setRightBorderColor(Optional.ofNullable(params.getBorderColor()).orElse(IndexedColors.BLACK.getIndex())); // 右边框颜色

        // 设置对齐方式
        style.setAlignment(Optional.ofNullable(params.getAlignment()).orElse(HorizontalAlignment.CENTER)); // 水平对齐
        style.setVerticalAlignment(Optional.ofNullable(params.getVerticalAlignment()).orElse(VerticalAlignment.CENTER)); // 垂直对齐

        return style; // 返回构建好的CellStyle对象
    }

    /*自定义字体样式*/
    public static CellStyle createFontCellStyle(Workbook workbook, CellStyleBuild params) {
        if (params == null) {
            params = new CellStyleBuild(); // 如果params为null，直接创建一个新的默认实例
        }
        CellStyle style = workbook.createCellStyle();

        // 设置默认样式
        // 创建字体并设置样式
        Font font = workbook.createFont();
        // 使用Optional来安全地处理可能为null的参数值，确保每个属性都有一个默认值
        font.setFontName(Optional.ofNullable(params.getFontName()).orElse("宋体")); // 设置字体名称
        font.setFontHeightInPoints(Optional.ofNullable(params.getFontSize()).orElse((short)11)); // 设置字体大小
        font.setBold(Optional.ofNullable(params.isBold()).orElse(false)); // 设置是否加粗
        font.setColor(Optional.ofNullable(params.getColorIndex()).orElse(IndexedColors.BLACK.getIndex())); // 设置字体颜色

        style.setFont(font); // 将字体应用于单元格样式

        // 设置边框样式
        style.setBorderTop(Optional.ofNullable(params.getBorderStyle()).orElse(BorderStyle.NONE)); // 上边框
        style.setBorderBottom(Optional.ofNullable(params.getBorderStyle()).orElse(BorderStyle.NONE)); // 下边框
        style.setBorderLeft(Optional.ofNullable(params.getBorderStyle()).orElse(BorderStyle.NONE)); // 左边框
        style.setBorderRight(Optional.ofNullable(params.getBorderStyle()).orElse(BorderStyle.NONE)); // 右边框

        // 设置对齐方式
        style.setAlignment(Optional.ofNullable(params.getAlignment()).orElse(HorizontalAlignment.CENTER)); // 水平对齐
        style.setVerticalAlignment(Optional.ofNullable(params.getVerticalAlignment()).orElse(VerticalAlignment.CENTER)); // 垂直对齐

        return style; // 返回构建好的CellStyle对象
    }


    /*默认边框样式*/
    public static CellStyle createBorderCellStyle(Workbook workbook, BorderStyle params) {
        CellStyle style = workbook.createCellStyle();
        style.setBorderTop(params);
        style.setBorderBottom(params);
        style.setBorderLeft(params);
        style.setBorderRight(params);
        // 设置对齐方式
        // 设置水平居中对齐
        style.setAlignment(HorizontalAlignment.CENTER);
        // 设置垂直居中对齐
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        return style;
    }
}
